﻿using System.Text;

namespace K3Cloud.WebApi.Core.IoC.DataEntity
{
    /// <summary>
    /// QueryParam 查询参数实体类。
    /// 封装表单查询所需的各种参数，如表单ID、字段、筛选条件、排序规则、分页参数等。
    /// </summary>
    public sealed class QueryParam : BaseEntify
    {
        /// <summary>
        /// 表单ID。
        /// </summary>
        public string FormId { get; set; }

        /// <summary>
        /// 字段键（多个字段用逗号分隔）。
        /// </summary>
        public string FieldKeys { get; set; }

        /// <summary>
        /// 筛选条件字符串。
        /// </summary>
        public string FilterString { get; set; }

        /// <summary>
        /// 排序规则字符串。
        /// </summary>
        public string OrderString { get; set; }

        /// <summary>
        /// 开始行索引。
        /// </summary>
        public int StartRow { get; set; }

        /// <summary>
        /// 限制返回行数。
        /// </summary>
        public int Limit { get; set; }

        /// <summary>
        /// 顶部行数。
        /// </summary>
        public int TopRowCount { get; set; }

        /// <summary>
        /// 生成缓存键。
        /// 根据查询参数生成唯一的缓存标识。
        /// </summary>
        /// <returns>缓存键字符串</returns>
        public string GenerateCacheKey()
        {
            StringBuilder cacheKeyBuilder = new();
            _ = cacheKeyBuilder.Append("FormId=").Append(FormId);
            _ = cacheKeyBuilder.Append("|FieldKeys=").Append(FieldKeys);
            _ = cacheKeyBuilder.Append("|FilterString=").Append(FilterString);
            _ = cacheKeyBuilder.Append("|OrderString=").Append(OrderString);
            _ = cacheKeyBuilder.Append("|StartRow=").Append(StartRow);
            _ = cacheKeyBuilder.Append("|Limit=").Append(Limit);
            _ = cacheKeyBuilder.Append("|TopRowCount=").Append(TopRowCount);
            return cacheKeyBuilder.ToString();
        }
    }
}
